#include "Document.h"
namespace xml{


/********************************************
 *              Public
 ********************************************/

    /********************************************
     *              Constructors
     ********************************************/

        Document::Document(){}

        Document::Document(string filepath){
            LoadXML(filepath);
        }

        Document::Document(ifstream &file){
            LoadFile(file);
        }

    /********************************************
     *              Methods
     ********************************************/

/********************************************
 *              Private
 ********************************************/

    /********************************************
     *              Methods
     ********************************************/


        bool Document::LoadFile(ifstream &f){
            try{
                if(f.is_open()){
                    SkipFirstLine(f);
                    LoadRootElement(f);
                } else{
                    throw(string("Can't open file"));
                }
            } catch(string errorString){
                printf(" Error : %s \n", errorString.c_str());
                return false;
            }
            return true;
        }

        bool Document::LoadXML(string filePath){
            ifstream file (filePath, ifstream::in | ifstream::out);
            if(LoadFile(file)){
                return true;
            }
        }

        void Document::LoadElement(){

        }

        void Document::SkipFirstLine(ifstream &file){
            char  firstline[500];
            file.getline(firstline, 1000);
        }

        void Document::LoadRootElement(ifstream &file){
            char c;
            bool error = false;
            while(!file.eof() && !error){

                if( c== '<'){
                    m_Root = new Element(file);
                }
                 file>>c;
            }
        }

        void Document::Print(){
            m_Root->Print();
        }

        bool Document::Save(const char *filePath){
            ofstream f(filePath, ofstream::trunc);
            f<<"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
            Save(f);
            return false;
        }

        void Document::Save(ofstream & f){
            m_Root->Save(f);
        }
}
